#ifndef __RECEPTOR_MOVS_H__
#define __RECEPTOR_MOVS_H__

#include "../Common/Thread.h"
#include "../Common/Socket.h"
#include "../Common/Mutex.h"
#include "../Common/ConditionVariable.h"
#include <jsoncpp/json.h>
#include <list>
#include <queue>

class ReceptorMovs: public Thread{
private:
    bool& stopWindow;
    bool running;
    Socket* socket;
    std::queue<Json::Value,std::list<Json::Value> > recibido;
    Mutex& mut;
    ConditionVariable& condVar;
public:
	//Constructor, recibe el socket donde va a recibir datos y una referencia
	//a un booleano que se usa para saber cuando se recibieron datos
	ReceptorMovs(Socket*, bool&, Mutex&, ConditionVariable&);
	//Método principal del thread que realiza la tarea de recibir datos
	void startMethod();
	//Devuelve true si el thread se está ejecutando
	bool isRunning();
	//Finaliza la ejecución del thread
	void finish();
	//Devuelve true si se recibieron datos, false en caso contrario.
	bool hayDatos();
	//Guarda en el Json::Value el primer dato recibido y lo elimina de la cola
	//de datos recibidos.
	void getDato(Json::Value&);
	virtual ~ReceptorMovs();
};


#endif // __RECEPTOR_MOVS_H__
